/** \file    imageclass_decl.h
  * \brief   Fast (no #include) declarations of many concrete types of images.
  * \date    2002
  * \author  Fedor Chelnokov
  * \version $Header: /home/cscom1r4/cvsroot/cs/include/imglib/imageclass_decl.h,v 1.2 2004/06/12 13:25:02 cscom1r4 Exp $
  */

#ifndef _imageclass_decl_h_
#define _imageclass_decl_h_

namespace YATL { 
	template<class T> class Arr2D;
}

namespace img {
	template <class T> class BGRA;
	template <class T> class BGR;
	template <class T> class RGBA;
	template <class T> class ARGB;
	template <class T> class image;

	class bitmap;

	struct bRGB;
	struct fRGB;
	typedef  YATL::Arr2D<bRGB>  AImage;     // 32-bits color image
	typedef  YATL::Arr2D<fRGB>  FImage;     // {float,float,float,float} color image
}

namespace types {
	template<class T> class point;
}
using namespace types;

//ImageMagick
struct _Image;
typedef _Image Image;

typedef img::image<unsigned char>	mono_byte_image;
typedef img::BGRA<unsigned char>	byte_color;
typedef img::image<byte_color>		byte_image;
typedef point<float>				complex_color;

typedef img::ARGB<unsigned char>	argb_byte_color;
typedef img::image<argb_byte_color>	argb_byte_image;

//assuming that segm_image & index_map can be reinterpreted into each other
typedef	byte_image					segm_image;
typedef img::image<unsigned short>	short_index_map;
typedef img::image<int>				index_map;
typedef img::image<float>			mono_float_image;
typedef img::image<complex_color>	complex_image;

typedef img::BGRA<float>			float_color;
typedef img::image<float_color>		float_image;

typedef img::BGR<unsigned char>		small_byte_color;
typedef img::image<small_byte_color> small_byte_image;

typedef img::BGR<float>				small_float_color;
typedef img::image<small_float_color> small_float_image;

class QImage;

#endif //_imageclass_decl_h_
